package JeuInterfaces;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;


import Player.Player;

public abstract class PartieLocalInfosAbstract extends JDialog{

	protected Color[] couleurs = { Color.RED, Color.BLUE, Color.GREEN, Color.YELLOW, Color.GRAY, Color.CYAN, Color.BLACK,Color.MAGENTA,
			Color.ORANGE, Color.PINK, Color.WHITE, Color.DARK_GRAY, Color.LIGHT_GRAY};
	
	protected String versionDuJeu;
	protected int nombreMax;
	protected Vector<Player> listeJoueurs;
	
	protected JTextField[] fieldsTab;
	private JCheckBox[] chekBoxTab;
	protected boolean[] joueursReels;
	private JRadioButton [] typeJoueurs;
	
	private JPanel panelJoueurs, validation ;
	private JScrollPane scrollPane;
	private JButton valider,annuler;
	
	public PartieLocalInfosAbstract(String versionJeu) {
		this.setSize(new Dimension(550,250));
		this.setTitle("Selection des joueurs");
		this.versionDuJeu = versionJeu;
		initComposants();
		this.setLocationRelativeTo(null);
		this.setResizable(false);
		this.pack();
		this.setVisible(true);	
	}

	private void initComposants() {
		
		listeJoueurs = new Vector<Player>();
		
		// recupere le nombre de joueurs
		if(!initNbJoueursMax())
			return;
		
		panelJoueurs = new JPanel();
		validation = new JPanel();
		panelJoueurs.setLayout(new GridLayout(nombreMax, 5));
		panelJoueurs.setBorder(BorderFactory.createTitledBorder("Joueurs"));
		validation.setLayout(new GridLayout(1, 2));
		
		panelJoueurs.setPreferredSize(new Dimension(550,170));
		validation.setPreferredSize(new Dimension(550,40));
		scrollPane = new JScrollPane(panelJoueurs);
		
		panelJoueurs.setPreferredSize(new Dimension(500,30*nombreMax));

		
		chekBoxTab = new JCheckBox[nombreMax];
		fieldsTab = new JTextField[nombreMax];
		joueursReels = new boolean[nombreMax];
		typeJoueurs = new JRadioButton[nombreMax];
		
		for (int i = 0; i < nombreMax; i++) {
			JCheckBox checkBox = new JCheckBox("Nom joueur "+(i+1));
			chekBoxTab[i] = checkBox;
			JTextField nomField = new JTextField();
			fieldsTab[i] = nomField;
			JRadioButton ordi = new JRadioButton("Ordinateur");
			JRadioButton joueur = new JRadioButton("Joueur");
			typeJoueurs[i] = joueur;
			ButtonGroup bg = new ButtonGroup();
			bg.add(ordi);
			bg.add(joueur);
			if(i==0) joueur.setSelected(true);
			else ordi.setSelected(true);
			joueursReels[i] = joueur.isSelected();
			panelJoueurs.add(checkBox);
			panelJoueurs.add(nomField);
			panelJoueurs.add(joueur);
			panelJoueurs.add(ordi);
		}

		valider = new JButton("Valider");
		annuler = new JButton("Annuler");
		valider.addActionListener(new ValiderActionListener());
		annuler.addActionListener(new AnnulerActionListener());

		
		validation.add(valider);
		validation.add(annuler);
		
		scrollPane.setAutoscrolls(true);
		scrollPane.setVisible(true);
		
		this.add(scrollPane,BorderLayout.CENTER);
		this.add(validation,BorderLayout.SOUTH);
	
		
		
	}

	
	class ValiderActionListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent arg0) {
			// mise a jour des joueurs reels
			for (int i = 0; i < nombreMax; i++) {
				if(chekBoxTab[i].isSelected())
					joueursReels[i] = typeJoueurs[i].isSelected();
			}
			
			for (int i = 0; i < nombreMax ; i++) {
				if(chekBoxTab[i].isSelected()){
					if(fieldsTab[i].getText().equals("")){
						JOptionPane.showMessageDialog(PartieLocalInfosAbstract.this,"Nom manquant","Erreur", JOptionPane.ERROR_MESSAGE);
						return;
					}
					else{
						creerJoueurs(i);
					}
				}
			}
			PartieLocalInfosAbstract.this.setVisible(false);
			SwingUtilities.invokeLater(new JeuInterfaceGraphique(listeJoueurs,versionDuJeu));
		}
	}	
	
	class AnnulerActionListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent arg0) {
			PartieLocalInfosAbstract.this.setVisible(false);
		}
		
	}
	
	//a redéfinir
	protected abstract boolean initNbJoueursMax();
	protected abstract void creerJoueurs(int i);
	
	
}
